#pragma once
#include"Hash.h"

template<class T>
struct DefaultToFunc{
    int operator()(const T& data)
    {
        return data;
    }
};
template<class K,class V>
struct IsKV
{
    K operator()(const std::pair<K,V>& data)
    {
        return data.first;
    }
};

template<class K,class V,class ToInt = DefaultToFunc<K>>
class MultiMap{
    public:
    typedef typename HashTable<std::pair<K,V>,K,IsKV<K,V>,ToInt>::iterator iterator;
    private:
    HashTable<std::pair<K,V>,K,IsKV<K,V>,ToInt> _table;
    
    public:
    iterator begin()
    {
        return _table.begin();
    }
    iterator end()
    {
        return _table.end();
    }
    bool insert(const std::pair<K,V>& data)
    {
        return _table.insert(data);
    }
    bool erase(const K& data)
    {
        return _table.erase(data);
    }
    bool find(const K& data)
    {
        return _table.find(data);
    }


};